home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / util / cdity / RunList2.lha / RunList2 / Source / RListN.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-18  |  18.2 KB  |  640 lines

  1. /*
  2.  *  Source machine generated by GadToolsBox V2.0b
  3.  *  which is (c) Copyright 1991-1993 Jaba Development
  4.  *
  5.  *  GUI Designed by : -- Heinz Reinert --
  6.  */
  7. #include <exec/types.h>
  8. #include <intuition/intuition.h>
  9. #include <intuition/classes.h>
  10. #include <intuition/classusr.h>
  11. #include <intuition/imageclass.h>
  12. #include <intuition/gadgetclass.h>
  13. #include <libraries/gadtools.h>
  14. #include <graphics/displayinfo.h>
  15. #include <graphics/GfxBase.h>
  16. #include <clib/exec_protos.h>
  17. #include <clib/intuition_protos.h>
  18. #include <clib/gadtools_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #include <clib/utility_protos.h>
  21. #include <proto/intuition.h>
  22. #include <proto/graphics.h>
  23. #include <proto/exec.h>
  24. #include <proto/dos.h>
  25. #include <proto/gadtools.h>
  26. #include <exec/memory.h>
  27. #include <string.h>
  28.  
  29. /*********************************************/
  30. #define GetString( g )      ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
  31. #define GetNumber( g )      ((( struct StringInfo * )g->SpecialInfo )->LongInt )
  32.  
  33. #define GD_list                                0
  34. #define GD_gadtxt                              1
  35. #define GD_command                             2
  36. #define GD_command2                            3
  37. #define GD_new                                 4
  38. #define GD_del                                 5
  39. #define GD_start                               6
  40. #define GD_save                                7
  41. #define GD_Gadget80                            8
  42. #define GD_Gadget90                            9
  43.  
  44. #define GDX_list                               0
  45. #define GDX_gadtxt                             1
  46. #define GDX_command                            2
  47. #define GDX_command2                           3
  48. #define GDX_new                                4
  49. #define GDX_del                                5
  50. #define GDX_start                              6
  51. #define GDX_save                               7
  52. #define GDX_Gadget80                           8
  53. #define GDX_Gadget90                           9
  54.  
  55. #define Project0_CNT 10
  56. UBYTE *vers = "\0$VER: RunList 2";
  57.  
  58. extern struct IntuitionBase *IntuitionBase;
  59. extern struct Library       *GadToolsBase;
  60.  
  61. extern struct Screen        *Scr;
  62. extern UBYTE                 *PubScreenName;
  63. extern APTR                  VisualInfo;
  64. extern struct Window        *Project0Wnd;
  65. extern struct Gadget        *Project0GList;
  66. extern struct Gadget        *Project0Gadgets[10];
  67. extern UWORD                 Project0Left;
  68. extern UWORD                 Project0Top;
  69. extern UWORD                 Project0Width;
  70. extern UWORD                 Project0Height;
  71. extern UBYTE                *Project0Wdt;
  72. extern struct TextAttr       topaz8;
  73. extern UWORD                 Project0GTypes[];
  74. extern struct NewGadget      Project0NGad[];
  75. extern ULONG                 Project0GTags[];
  76.  
  77.  
  78. extern int SetupScreen( void );
  79. extern void CloseDownScreen( void );
  80. extern int OpenProject0Window( void );
  81. extern void CloseProject0Window( void );
  82.  
  83. LONG TimeDelay( long unit, unsigned long secs, unsigned long microsecs  );
  84.  
  85. /*********************************************/
  86.  
  87. struct Screen         *Scr = NULL;
  88. UBYTE                 *PubScreenName = NULL;
  89. APTR                   VisualInfo = NULL;
  90. struct Window         *Project0Wnd = NULL;
  91. struct Gadget         *Project0GList = NULL;
  92. struct Gadget         *Project0Gadgets[10];
  93. UWORD                  Project0Left = 353;
  94. UWORD                  Project0Top = 10;
  95. UWORD                  Project0Width = 283;
  96. UWORD                  Project0Height = 0;
  97. UBYTE                 *Project0Wdt = (UBYTE *)"RunList  N2";
  98.  
  99. struct TextAttr topaz8 = {
  100.         ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
  101.  
  102. UWORD Project0GTypes[] = {
  103.         LISTVIEW_KIND,
  104.         STRING_KIND,
  105.         STRING_KIND,
  106.         STRING_KIND,
  107.         BUTTON_KIND,
  108.         BUTTON_KIND,
  109.         BUTTON_KIND,
  110.         BUTTON_KIND,
  111.         TEXT_KIND,
  112.         TEXT_KIND
  113. };
  114.  
  115. struct NewGadget Project0NGad[] = {
  116.         20, 10, 159, 88, NULL, NULL, GD_list, 0, NULL, NULL,
  117.         20, 96, 158, 12, NULL, NULL, GD_gadtxt, 0, NULL, NULL,
  118.         6, 118, 250, 12, NULL, NULL, GD_command, 0, NULL, NULL,
  119.         6, 130, 250, 12, NULL, NULL, GD_command2, 0, NULL, NULL,
  120.         184, 10, 57, 11, (UBYTE *)"NEW", NULL, GD_new, PLACETEXT_IN, NULL, NULL,
  121.         184, 22, 57, 11, (UBYTE *)"DELETE", NULL, GD_del, PLACETEXT_IN, NULL, NULL,
  122.         184, 46, 57, 62, (UBYTE *)"RUN", NULL, GD_start, PLACETEXT_IN, NULL, NULL,
  123.         184, 34, 57, 11, (UBYTE *)"SAVE", NULL, GD_save, PLACETEXT_IN, NULL, NULL,
  124.         13, 6, 236, 106, NULL, NULL, GD_Gadget80, 0, NULL, NULL,
  125.         6, 3, 249, 112, NULL, NULL, GD_Gadget90, 0, NULL, NULL
  126. };
  127.  
  128. ULONG Project0GTags[] = {
  129.         (TAG_DONE),
  130.         (GTST_MaxChars), 20, (TAG_DONE),
  131.         (GTST_MaxChars), 50, (TAG_DONE),
  132.         (GTST_MaxChars), 50, (TAG_DONE),
  133.         (TAG_DONE),
  134.         (TAG_DONE),
  135.         (TAG_DONE),
  136.         (TAG_DONE),
  137.         (GTTX_Border), TRUE, (TAG_DONE),
  138.         (GTTX_Border), TRUE, (TAG_DONE)
  139. };
  140.  
  141. int SetupScreen( void )
  142. {
  143.         if ( ! ( Scr = LockPubScreen( PubScreenName )))
  144.                 return( 1L );
  145.  
  146.         if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  147.                 return( 2L );
  148.  
  149.         return( 0L );
  150. }
  151.  
  152. void CloseDownScreen( void )
  153. {
  154.         if ( VisualInfo ) {
  155.                 FreeVisualInfo( VisualInfo );
  156.                 VisualInfo = NULL;
  157.         }
  158.  
  159.         if ( Scr        ) {
  160.                 UnlockPubScreen( NULL, Scr );
  161.                 Scr = NULL;
  162.         }
  163. }
  164.  
  165. int OpenProject0Window( void )
  166. {
  167.         struct NewGadget        ng;
  168.         struct Gadget   *g;
  169.         UWORD           lc, tc;
  170.         UWORD           offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  171.  
  172.         if ( ! ( g = CreateContext( &Project0GList )))
  173.                 return( 1L );
  174.  
  175.         for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
  176.  
  177.                 CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  178.  
  179.                 ng.ng_VisualInfo = VisualInfo;
  180.                 ng.ng_TextAttr   = &topaz8;
  181.                 ng.ng_LeftEdge  += offx;
  182.                 ng.ng_TopEdge   += offy;
  183.  
  184.                 Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
  185.  
  186.                 while( Project0GTags[ tc ] ) tc += 2;
  187.                 tc++;
  188.  
  189.                 if ( NOT g )
  190.                         return( 2L );
  191.         }
  192.  
  193.         if ( ! ( Project0Wnd = OpenWindowTags( NULL,
  194.                                 WA_Left,        Project0Left,
  195.                                 WA_Top,         Project0Top,
  196.                                 WA_Width,       Project0Width,
  197.                                 WA_Height,      Project0Height + offy,
  198.                                 WA_IDCMP,       LISTVIEWIDCMP|
  199.                                                 BUTTONIDCMP|
  200.                                                 STRINGIDCMP|
  201.                                                 IDCMP_NEWSIZE|
  202.                                                 IDCMP_MENUPICK|
  203.                                                 IDCMP_CLOSEWINDOW|
  204.                                                 IDCMP_CHANGEWINDOW|
  205.                                                 IDCMP_INTUITICKS |
  206.                                                 IDCMP_MOUSEBUTTONS|
  207.                                                 IDCMP_REFRESHWINDOW,
  208.                                 WA_Flags,       WFLG_SIZEGADGET|
  209.                                                 WFLG_DRAGBAR|
  210.                                                 WFLG_DEPTHGADGET|
  211.                                                 WFLG_CLOSEGADGET|
  212.                                                 WFLG_SMART_REFRESH,
  213.                                 WA_Gadgets,     Project0GList,
  214.                                 WA_Title,       Project0Wdt,
  215.                                 WA_ScreenTitle, "RunList N2 Heinz Reinert 1994-95",
  216.                                 WA_PubScreen,   Scr,
  217.                                 WA_MinWidth,    283,
  218.                                 WA_MinHeight,   157,
  219.                                 WA_MaxWidth,    283,
  220.                                 WA_MaxHeight,   157,
  221.                                 TAG_DONE )))
  222.         return( 4L );
  223.  
  224.         GT_RefreshWindow( Project0Wnd, NULL );
  225.  
  226.         return( 0L );
  227. }
  228.  
  229. void CloseProject0Window( void )
  230. {
  231.         if ( Project0Wnd        ) {
  232.                 CloseWindow( Project0Wnd );
  233.                 Project0Wnd = NULL;
  234.         }
  235.  
  236.         if ( Project0GList      ) {
  237.                 FreeGadgets( Project0GList );
  238.                 Project0GList = NULL;
  239.         }
  240. }
  241. /***************************************/
  242.  
  243. /* Main Program Part */
  244.  
  245. /* Structur for Data-Entries */
  246.  
  247. struct PRJ {
  248.  
  249.     char    Name[5];
  250.  
  251.     char    gadtxt[20];
  252.     char    command[50];
  253.     char    command2[50];
  254.     USHORT  new;
  255.     USHORT  del;
  256.     USHORT  save;
  257.     USHORT  req;
  258.     USHORT  start;
  259. };
  260.  
  261. struct PRJnode {
  262.         struct  Node n;
  263.         struct  PRJ d;
  264. };
  265.  
  266. /* PRJ-Nodes are in this List */
  267.  
  268. struct List prjlist;
  269.  
  270. /* The actual Entry */
  271.  
  272. struct PRJnode *currentprj;
  273.  
  274. /* String-Gadgets */
  275.  
  276. void gt_SetString( struct Gadget        *gad,
  277.                                    struct Window        *w,
  278.                                    char                         *string )
  279. {
  280.         GT_SetGadgetAttrs( gad, w, NULL, GTST_String, string, TAG_DONE );
  281. }
  282.  
  283. char * gt_GetString( struct Gadget      *gad )
  284. {
  285.         struct StringInfo *si = gad->SpecialInfo;
  286.  
  287.         if( si )
  288.                 return( ( char * ) si->Buffer );
  289.         else
  290.                 return( NULL );
  291. }
  292.  
  293. /* Manage Lists for Listview-Gadgets */
  294. /* Add List */
  295.  
  296. void gt_AttachList(     struct Gadget   *lv,
  297.                                         struct Window   *w,
  298.                                         struct List     *list )
  299. {
  300.         GT_SetGadgetAttrs( lv, w, NULL, GTLV_Labels, list, TAG_DONE );
  301. }
  302.  
  303. /* Put Actuel Entry */
  304.  
  305. void gt_SetLV( struct Gadget    *gad,
  306.                            struct Window        *w,
  307.                            ULONG                        value)
  308. {
  309.         GT_SetGadgetAttrs( gad, w, NULL, GTLV_Selected, value, TAG_DONE );
  310. }
  311.  
  312. /* get x-Entry from Exec-List */
  313.  
  314. struct Node * gt_GetListEntry( struct List *l,
  315.                                                            int num )
  316. {
  317.         int count = 0;
  318.         struct Node *n = l->lh_Head;
  319.  
  320.         while( n->ln_Succ )
  321.         {
  322.                 if( num==count ) return( n );
  323.                 n = n->ln_Succ;
  324.                 count++;
  325.         }
  326.         return( NULL );
  327. }
  328.  
  329. /* Number of a Node in List? */
  330.  
  331. int gt_GetListEntryNum( struct List *l,
  332.                                                 struct Node *n )
  333. {
  334.         int count = 0;
  335.         struct Node *r = l->lh_Head;
  336.  
  337.         while( r->ln_Succ )
  338.         {
  339.                 if( r==n ) return( count );
  340.                 r = r->ln_Succ;
  341.                 count++;
  342.         }
  343.         return( -1 );
  344. }
  345.  
  346. /* Count Entries of List */
  347.  
  348. int gt_GetListNumEntries( struct List *l )
  349. {
  350.         int count = 0;
  351.         struct Node *n = l->lh_Head;
  352.  
  353.         while( n->ln_Succ )
  354.         {
  355.                 n = n->ln_Succ;
  356.                 count++;
  357.         }
  358.  
  359.         return( count );
  360. }
  361.  
  362. /************************************************************************/
  363.  
  364. /* Load Command.DAT */
  365.  
  366. void loadprjlist( void )
  367. {
  368.         struct PRJ new;
  369.         struct PRJnode *n;
  370.         BPTR f;
  371.  
  372.         /* Init List */
  373.         NewList( &prjlist );
  374.         currentprj = NULL;
  375.  
  376.         /* Open Com.DAT */
  377.         f = Open( "S:Command.LIST", MODE_OLDFILE );
  378.         if( !f )
  379.                 return;
  380.  
  381.         /* Inputs read in */
  382.         while( Read( f, &new, sizeof( new ) ) == sizeof( new ) )
  383.         {
  384.                /* New Node */
  385.                 n = AllocVec( sizeof( *n ), 0 );
  386.                 if( !n )
  387.                         break;
  388.  
  389.         /* Copy Structur and add to List */
  390.                 n->d = new;
  391.                 n->n.ln_Name = n->d.Name;
  392.                 n->n.ln_Pri      = - n->d.Name[0];
  393.                 Enqueue( &prjlist, (struct Node *) n );
  394.         }
  395.  
  396.         Close( f );
  397. }
  398.  
  399. /* Saves List and Frees it */
  400. void save_and_freeprjlist( void )
  401. {
  402.         struct PRJnode *n;
  403.         BPTR f;
  404.  
  405.         f = Open( "S:Command.LIST", MODE_NEWFILE );
  406.  
  407.         while( ( n = (struct PRJnode * ) RemHead( &prjlist ) ) )
  408.         {
  409.             /* Save Node */
  410.                 if( f )
  411.                         Write( f, &n->d, sizeof( struct PRJ ) );
  412.             /* Free Node */
  413.                 FreeVec( n );
  414.         }
  415.  
  416.         if( f )
  417.                 Close( f );
  418. }
  419.  
  420.  
  421. /************************************************************************/
  422.  
  423. /* Puts actual Structur-Values to Gadgets */
  424.  
  425. void setgadvals( void )
  426. {
  427.  
  428.         if( !currentprj )
  429.             return;
  430.  
  431.         gt_SetString(   Project0Gadgets[ GD_gadtxt ], Project0Wnd,
  432.                                                        currentprj->d.Name );
  433.  
  434.         gt_SetString(   Project0Gadgets[ GD_command ], Project0Wnd,
  435.                                                     currentprj->d.command );
  436.  
  437.         gt_SetString(   Project0Gadgets[ GD_command2 ], Project0Wnd,
  438.                                                     currentprj->d.command2 );
  439.  
  440. }
  441.  
  442. /* Create a new Empty Input */
  443.  
  444. void newprj( void )
  445. {
  446.         struct PRJnode *new;
  447.  
  448.         new = AllocVec( sizeof( *new ), MEMF_CLEAR );
  449.  
  450.         if( !new )
  451.                 return;
  452.  
  453.         currentprj = new;
  454.  
  455.         new->n.ln_Name = new->d.Name;
  456.  
  457.         strcpy( new->d.Name, "new" );
  458.  
  459.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd,
  460.                                                       (struct List *) ~0 );
  461.  
  462.         new->n.ln_Pri    = - new->d.Name[0];
  463.         Enqueue( &prjlist, (struct Node *) new );
  464.  
  465.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  466.  
  467.         gt_SetLV( Project0Gadgets[GD_list], Project0Wnd,
  468.                                      gt_GetListEntryNum( &prjlist, new ) );
  469.         setgadvals();
  470. }
  471.  
  472. /* Work on Gadget-Event */
  473. void dogadup( struct IntuiMessage *im )
  474. {
  475.         struct Gadget *g = im->IAddress;
  476.  
  477.         switch( g->GadgetID )
  478.         {
  479.  
  480. /*** Enter List ***/
  481. case GD_list:
  482.         currentprj = (struct PRJnode *) gt_GetListEntry( &prjlist, im->Code );
  483.         setgadvals();
  484.         break;
  485.  
  486. /*** New ***/
  487. case GD_new:
  488.         newprj();
  489.         break;
  490.  
  491. /*** Delete ***/
  492. case GD_del:
  493.         if( currentprj )
  494.         {
  495.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  496.                                                        (struct List *) ~0 );
  497.         Remove( currentprj );
  498.         FreeVec( currentprj );
  499.         currentprj = FALSE;
  500.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  501.         gt_SetLV( Project0Gadgets[ GD_list ], Project0Wnd, ~0 );
  502.         }
  503.         break;
  504. /*** Program Name ***/
  505. case GD_gadtxt:
  506.         if( currentprj )
  507.         {
  508.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd,
  509.                                                          (struct List *) ~0 );
  510.    strcpy( currentprj->d.Name, gt_GetString( Project0Gadgets[ GD_gadtxt ] ) );
  511.         gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &prjlist );
  512.         }
  513.         break;
  514.  
  515. /*** Command-string ***/
  516. case GD_command:
  517.         if( currentprj )
  518.         strcpy( currentprj->d.command,
  519.                              gt_GetString( Project0Gadgets[ GD_command ] ) );
  520.         break;
  521.  
  522. /*** Command-string ***/
  523. case GD_command2:
  524.         if( currentprj )
  525.         strcpy( currentprj->d.command2,
  526.                              gt_GetString( Project0Gadgets[ GD_command2 ] ) );
  527.         break;
  528.  
  529. /*** Start Program ***/
  530. case GD_start:
  531.         Execute(currentprj->d.command, NULL, Output());
  532.         Execute("Wait 2 secs", NULL, Output());
  533.         Execute(currentprj->d.command2, NULL, Output());
  534.         break;
  535.  
  536. /*** Save List ***/
  537. case GD_save:
  538.         {
  539.             save_and_freeprjlist();
  540.             loadprjlist();
  541.         }
  542.         break;
  543.         }
  544. }
  545.  
  546. /* Program start */
  547.  
  548. int main( void )
  549. {
  550.  
  551.         struct IntuiMessage     *im,imsg;
  552.         BOOL   Done = FALSE;
  553.  
  554.         /* Store some data copied from the IntuitionMessage in these variables: */
  555.         USHORT code;           /* Code. */
  556.         ULONG seconds, micros; /* Time. */
  557.  
  558.  
  559.         /* Declare and initialize the time stamps: */
  560.         ULONG sec1 = 0;
  561.         ULONG mic1 = 0;
  562.         ULONG sec2 = 0;
  563.         ULONG mic2 = 0;
  564.  
  565.         SetupScreen();
  566.         OpenProject0Window();
  567.  
  568.         loadprjlist();
  569.  
  570.         gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &prjlist );
  571.  
  572.         while( !Done )
  573.         {
  574.  
  575.                 while( !( im=GT_GetIMsg( Project0Wnd->UserPort ) ) )
  576.                         WaitPort( Project0Wnd->UserPort );
  577.  
  578.                     code    = im->Code;
  579.                     seconds = im->Seconds;
  580.                     micros  = im->Micros;
  581.  
  582.                 imsg = *im;
  583.                 GT_ReplyIMsg( im );
  584.  
  585.                 switch( imsg.Class )
  586.                 {
  587.  
  588.                         case IDCMP_CLOSEWINDOW:
  589.                                 Done = TRUE;
  590.                                 break;
  591.  
  592.                         case IDCMP_GADGETUP:
  593.                                 dogadup( &imsg );
  594.                                 break;
  595.  
  596.                         case IDCMP_MOUSEBUTTONS: /* The user pressed/released a mouse button. */
  597.                                 if( code == SELECTDOWN )
  598.                                 {
  599.                                    /* Left button pressed. */
  600.  
  601.                                    /* Save the old time: */
  602.                                     sec2 = sec1;
  603.                                     mic2 = mic1;
  604.  
  605.                                    /* Get the new time: */
  606.                                     sec1 = seconds;
  607.                                     mic1 = micros;
  608.  
  609.                                    /* Check if it was a double-click or not: */
  610.                                 if( DoubleClick( sec2, mic2, sec1, mic1 ) )
  611.                                 {
  612.                                     Execute("RUN >NIL: Shellwin ", NULL, Output());
  613.                                    /* Reset the values: */
  614.                                     sec1 = 0;
  615.                                     mic1 = 0;
  616.                                     }
  617.                                 }
  618.                                 break;
  619.  
  620.  
  621.                         case IDCMP_REFRESHWINDOW:
  622.                                 GT_BeginRefresh( Project0Wnd );
  623.                                 GT_EndRefresh( Project0Wnd, TRUE );
  624.                                 break;
  625.  
  626.                 }
  627.  
  628.         }
  629.  
  630.         CloseProject0Window();
  631.         CloseDownScreen();
  632.  
  633.         return(0);
  634. }
  635.  
  636.  
  637.  
  638.  
  639.  
  640.